// let a = Promise.resolve(1);
// let b = Promise.resolve(a); // 会直接返回 Promise a


// b.then(res => {
//   console.log(res,'b');
// })


// a.then(res => {
//   console.log(res,'a');
// })

// console.log(3,'log');

// 3 1 b 1 a




// 当 resolve 一个 Promise的时候 还会产生1个微任务
// 该微任务执行的时候 还会产生一个 微任务该任务 该微任务 就是 会将 a的状态吸收给 b 此刻b的状态回改变
// 意思就是产生 2个微任务
// 其实就像 async 函数 和 then回调 返回一个Promise 一样 会产生 2个微任务 第一个微任务执行后 会将第二个任务 插入微任务队列



let a = Promise.resolve(1);
let b = new Promise(p =>p(a));


b.then(res => {
  console.log(res,'b');
})


a.then(res => {
  console.log(res,'a');
}).then(res => {
  console.log('a2',res);
}).then(()=>{
  console.log('a3');
})

console.log(3,'log');

// 3 log
// 1 a
// a2 undefined
// 1 b
// a3

// 执行步骤

// 1. let a = Promise.resolve(1);
// 2. let b = new Promise(p =>p(a)); 产生一个微任务 { Pa => Pb}
// 微任务队列的状态
// [
//   [任务1：将 任务2：{ Pa => Pb} 加入微队列]
// ]


// 3.
// 执行 b.then 此时 b的 状态还是 pedding 将回调函数 加入 Promise 内部 队列
// 微任务队列的状态
// [
//   [任务1：将 任务2：{ Pa => Pb} 加入微队列]
// ]

// 4.a.then().then().then()   此时a的状态已经是 resolve了 将 先将 console.log(res,'a'); 加入微队列
// 后面两个then 执行的时候 因为 第一个then 的回调此时还在微队列 所有then返回的Promise 还是 pedding 所以
// 后面两个then的回调 此时并没有加入 微队列 只是 加入Promise内部的 数组队列
// 微任务队列的状态
// [
//   [任务1：将 任务2：{ Pa => Pb} 加入微队列]
//  {  console.log(res,'a');}
// ]

// 5.

// 输出 console.log(3,'log');
// 微任务队列的状态
// [
//   [任务1：将 任务2：{ Pa => Pb} 加入微队列]
//  {  console.log(res,'a');}
// ]


// 6. 执行 //任务1   { Pa => Pb} 将 任务2 加入微队列

// 微任务队列的状态
// [
//  {  console.log(res,'a');}
//  {任务2： { Pa => Pb}}
//  {

  // 7. 执行 console.log(res,'a');} 将该then 返回的promise 状态改为 f 然后将下一个 then的回调加入微队列
  //输出1 a

// 微任务队列的状态
// [
//  {任务2： { Pa => Pb}}
// { console.log('a2',res);}
//  {


  // 8. 执行{任务2： { Pa => Pb}} 将 b的状态改成f 将 console.log(res,'b'); 加入微队列
//

// 微任务队列的状态
// [
// { console.log('a2',res);}
// {console.log(res,'b')}
//  {

  // 9.执行{ console.log('a2',res);} 将   console.log('a3'); 加入 微队列
// 输出 a2 undifined
// 微任务队列的状态
// [
// {console.log(res,'b')}
//  {  console.log('a3');}
//  ]

// 10 因为 b吸收了a的状态 所有 res 是 1
// 输出 1 b

// 11. 输出 a3




